﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка);
	
	Элементы.Список.РежимВыбора = Параметры.РежимВыбора;
	Если Параметры.МножественныйВыбор <> Неопределено Тогда
		Элементы.Список.МножественныйВыбор = Параметры.МножественныйВыбор;
	КонецЕсли;
	Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда
		Параметры.КлючПользовательскихНастроек = "РежимВыбора";
		Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
	КонецЕсли;
	
	Заголовок = НСтр("ru='Машиночитаемые доверенности'");
	АвторизованныйПользователь = Пользователи.АвторизованныйПользователь();
	ДобавитьПолеОтбора("Доверитель", "ТипДоверителя");
	ДобавитьПолеОтбора("Представитель", "ТипПредставителя");
	
	ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "ОтборПоСостоянию, ТолькоДействующие, СертификатПредставителя, СертификатДоверителя");
	ДоверенностиПоРоли = ?(ЗначениеЗаполнено(Параметры.ДоверенностиПоРоли), Параметры.ДоверенностиПоРоли, Элементы.ДоверенностиПоРоли.СписокВыбора[0].Значение);
	Доверитель = ?(ЗначениеЗаполнено(Параметры.Доверитель), Параметры.Доверитель, Доверитель);
	Представитель = ?(ЗначениеЗаполнено(Параметры.Представитель), Параметры.Представитель, Представитель);
	Полномочия = ?(ЗначениеЗаполнено(Параметры.Полномочия), Параметры.Полномочия, Полномочия);
	Сертификат = ?(ТипЗнч(СертификатПредставителя) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования"), СертификатПредставителя, Неопределено);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
	ПараметрыРазмещения.КоманднаяПанель = КоманднаяПанель;
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	ЕстьПравоДобавления = ПравоДоступа("Добавление", Метаданные.Справочники.МашиночитаемыеДоверенности);
	
	Элементы.СписокЗагрузитьИзФайла.Видимость = ЕстьПравоДобавления;
	Элементы.СписокЗагрузитьИзРеестраФНС.Видимость = ЕстьПравоДобавления;
	Элементы.СписокПолучитьСтатус.Видимость = ПравоДоступа("Изменение", Метаданные.Справочники.МашиночитаемыеДоверенности);
	
	Настройки = МашиночитаемыеДоверенностиФНССлужебный.НастройкиПодсистемы();
	
	Элементы.ГруппаСтатусВДругомРеестре.Видимость = Настройки.ПоказыватьСтатусВФормеСписка;
	
	Если Настройки.ПоказыватьСтатусВФормеСписка Тогда
		
		Если ЗначениеЗаполнено(Настройки.ЗаголовокКолонкиСтатуса) Тогда
			Элементы.СтатусВДругомРеестре.Заголовок = Настройки.ЗаголовокКолонкиСтатуса;
		Иначе
			Элементы.СтатусВДругомРеестре.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
		КонецЕсли;
		Если Настройки.КартинкаКолонкиСтатуса <> Неопределено Тогда
			Элементы.СтатусВДругомРеестре.КартинкаШапки = Настройки.КартинкаКолонкиСтатуса;
		КонецЕсли;
		Если Настройки.КоллекцияКартинокДляСтроки <> Неопределено Тогда
			Элементы.ИндексСтатусаВДругомРеестре.КартинкаЗначений = Настройки.КоллекцияКартинокДляСтроки;
		Иначе
			Элементы.ИндексСтатусаВДругомРеестре.Видимость = Ложь;
		КонецЕсли;
		
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "СтатусВДругомРеестре", "");
	Иначе
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "СтатусВДругомРеестре", "НетСтатусов");
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	УстановитьОтбор();
	УстановитьПредставлениеПолномочий();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ТолькоДействующиеПриИзменении(Элемент)
	УстановитьОтбор();
КонецПроцедуры

&НаКлиенте
Процедура ПредставительПриИзменении(Элемент)
	УстановитьОтбор();
КонецПроцедуры 

&НаКлиенте
Процедура ДоверительПриИзменении(Элемент)
	УстановитьОтбор();
КонецПроцедуры 

&НаКлиенте
Процедура ДоверенностиПоРолиПриИзменении(Элемент)
	УстановитьОтбор();
КонецПроцедуры

&НаКлиенте
Процедура ТипДоверителяПриИзменении(Элемент)
	УстановитьТип("Доверитель", "ТипДоверителя");
КонецПроцедуры

&НаКлиенте
Процедура ТипПредставителяПриИзменении(Элемент)
	УстановитьТип("Представитель", "ТипПредставителя");
КонецПроцедуры

&НаКлиенте
Процедура ДоверительОчистка(СтандартнаяОбработка)
	ОчисткаОтбора("Доверитель", "ТипДоверителя");
КонецПроцедуры

&НаКлиенте
Процедура ПредставительОчистка(СтандартнаяОбработка)
	ОчисткаОтбора("Представитель", "ТипПредставителя");
КонецПроцедуры

&НаКлиенте
Процедура ПолномочияПриИзменении(Элемент)
	УстановитьОтбор();
КонецПроцедуры

&НаКлиенте
Процедура ПолномочияНажатие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораПолномочий", ЭтотОбъект);
	
	СтруктураДанных = Новый Структура("ПолномочияВТекстовомВиде, ТекстПолномочий, Полномочия", Ложь);
	Если ТипЗнч(Полномочия) = Тип("СписокЗначений") Тогда
		МассивПолномочий = Полномочия.ВыгрузитьЗначения();
	Иначе
		МассивПолномочий = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Полномочия);
	КонецЕсли;
	
	СтруктураДанных.Полномочия = ПоместитьВоВременноеХранилище(МассивПолномочий, УникальныйИдентификатор);
	
	ПараметрыОткрытия = Новый Структура("ТолькоПросмотр, ВыбранныеПолномочия, РежимКлассификатора", Ложь, СтруктураДанных, Истина);

	ОткрытьФорму(
		"Справочник.МашиночитаемыеДоверенности.Форма.ФормаВводаПолномочий",
		ПараметрыОткрытия,
		ЭтотОбъект,,,,
		ОписаниеОповещения,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура СертификатНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Ложь);
	ПараметрыФормы.Вставить("ВыбранныйСертификат", СертификатПредставителя);
	ПараметрыФормы.Вставить("ВыполнятьНаСервере");
	ПараметрыФормы.Вставить("РежимВыбораСсылки", Истина);
	
	ОбработчикЗавершения = Новый ОписаниеОповещения("СертификатОкончаниеВыбора", ЭтотОбъект);
	МодульЭлектроннаяПодписьСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиент");
	МодульЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент, ОбработчикЗавершения);
	
КонецПроцедуры

&НаКлиенте
Процедура СертификатОчистка(Элемент, СтандартнаяОбработка)
	СертификатПредставителя = Неопределено;
	УстановитьОтбор();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

	Если Настройки.ПараметрыДанных.Элементы.Найти("СтатусВДругомРеестре").Значение = "НетСтатусов" Тогда
		Возврат;
	КонецЕсли;
	
	Доверенности = Новый Соответствие;
	МассивДоверенностей = Строки.ПолучитьКлючи();
	
	МашиночитаемыеДоверенностиФНСПереопределяемый.ПриПолученииСтатусов(МассивДоверенностей, Доверенности);
	
	Если Доверенности.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого Строка Из Строки Цикл
		
		Статус = Доверенности[Строка.Значение.Данные.Ссылка];
		Если Статус = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Строка.Значение.Данные.СтатусВДругомРеестре = Статус.Статус;
		Строка.Значение.Данные.ИндексСтатусаВДругомРеестре = Статус.ИндексКартинки;
	КонецЦикла;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВыгрузитьВФайл(Команда)
	МашиночитаемыеДоверенностиФНССлужебныйКлиент.ВыгрузитьДоверенностиВФайлы(Элементы.Список.ВыделенныеСтроки);
КонецПроцедуры  

&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
	
	ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
	ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Загрузка доверенности из файла'");
	ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
		"ru = 'Файлы доверенностей (%1)|%1'"), "*.xml;*.p7s;*.sig;");
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗагрузкеФайлов", ЭтотОбъект);
	ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещения, ПараметрыЗагрузки);
	
КонецПроцедуры  

&НаКлиенте
Процедура ЗагрузитьИзРеестраФНС(Команда)
	ПослеЗагрузкиДоверенности = Новый ОписаниеОповещения("ПослеЗагрузкиДоверенности", ЭтотОбъект);
	МашиночитаемыеДоверенностиФНССлужебныйКлиент.ПолучитьДоверенностьИзРеестраФНС(ПослеЗагрузкиДоверенности);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСтатусИзРеестраФНС(Команда)
	ДлительнаяОперация = ПолучитьСтатусНаСервере();
	Контекст = Новый Структура("ВыделенныеСтроки", Элементы.Список.ВыделенныеСтроки);
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеПолученияСтатуса", ЭтотОбъект, Контекст);
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
	
	
	ТекстСообщения = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
		НСтр("ru=';Запрашивается статус для %1 документа;;Запрашивается статус для %1 документов;Запрашивается статус для %1 документов;|Запрашивается статус для %1 документов'"), 
		Контекст.ВыделенныеСтроки.Количество(),, "ЧДЦ=0");
	
	ПоказатьОповещениеПользователя(
		НСтр("ru = 'Обновление статусов из Реестра ФНС'"),
		,
		ТекстСообщения,
		БиблиотекаКартинок.Информация32,
		СтатусОповещенияПользователя.Информация);
	
	ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(Знач ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура УстановитьОтбор()
	ТекущаяДатаСеанса = КонецДня(ОбщегоНазначенияКлиент.ДатаСеанса());
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Действует", Истина, ВидСравненияКомпоновкиДанных.Равно,,ТолькоДействующие);
	УстановитьОтборСоСтрокойПоиска(Доверитель, "Доверитель");
	УстановитьОтборСоСтрокойПоиска(Представитель, "Представитель");
	УстановитьОтборСоСтрокойПоиска(Полномочия, "Полномочия");
	УстановитьОтборПоРоли();
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ТекущаяДата", ТекущаяДатаСеанса);
	
	Если ОтборПоСостоянию = "СИстекающимСрокомДействия" Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ДатаОкончания", ТекущаяДатаСеанса, ВидСравненияКомпоновкиДанных.БольшеИлиРавно);
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор, "ДатаОкончания", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, 
			МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ДатаОкончанияПериодаИстекающихДоверенностей(ТекущаяДатаСеанса));
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Статус", ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Действует"), ВидСравненияКомпоновкиДанных.Равно);
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (с истекающим сроком)'"), Заголовок);
	ИначеЕсли ОтборПоСостоянию = "ТребуютВнимания" Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ДатаОкончания", ТекущаяДатаСеанса, ВидСравненияКомпоновкиДанных.Больше);
		МассивСтатусов = Новый Массив;
		МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.ОшибкаРегистрации"));
		МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Регистрация"));
		МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.РегистрацияОтмены"));
		
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ТехническийСтатус", МассивСтатусов, ВидСравненияКомпоновкиДанных.ВСписке);
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (требуют внимания)'"), Заголовок);
	ИначеЕсли ОтборПоСостоянию = "ОжидаютПодписания" Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ДатаОкончания", ТекущаяДатаСеанса, ВидСравненияКомпоновкиДанных.Больше);
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Статус", ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Черновик"), ВидСравненияКомпоновкиДанных.Равно);
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Подписана", Ложь, ВидСравненияКомпоновкиДанных.Равно);
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (ожидают подписания)'"), Заголовок);
	КонецЕсли;
	
	ВсеОтборыПоСертификатам = ВсеОтборыПоСертификатам();
		
	НастроитьОтборыСертификата(ВсеОтборыПоСертификатам, СертификатПредставителя, Истина);
	НастроитьОтборыСертификата(ВсеОтборыПоСертификатам, СертификатДоверителя, Ложь);
		
	Для Каждого ЭлементОтбора Из ВсеОтборыПоСертификатам Цикл
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, ЭлементОтбора.Ключ, ЭлементОтбора.Значение, ЭлементОтбора.Значение <> Неопределено);
	КонецЦикла;
	
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "СрокИстекающихДоверенностей",
		МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ДатаОкончанияПериодаИстекающихДоверенностей(ТекущаяДатаСеанса));
КонецПроцедуры    

&НаКлиенте
Процедура УстановитьОтборСоСтрокойПоиска(Значение, ИмяПоля) 
	Отбор = Новый Структура("Значение,СтрокаПоиска");
	Если ЗначениеЗаполнено(Значение) Тогда
		Если ТипЗнч(Значение) = Тип("Строка") Тогда
			Отбор.СтрокаПоиска = "%"+СформироватьСтрокуДляПоискаВЗапросе(Значение)+"%"; 
		Иначе
			Отбор.Значение = Значение;
		КонецЕсли;
	КонецЕсли;
	
	Для Каждого ЭлементОтбора Из Отбор Цикл
		ИмяПоляОтбора = ?(ЭлементОтбора.Ключ = "Значение", ИмяПоля, ИмяПоля+ЭлементОтбора.Ключ);
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, ИмяПоляОтбора, ЭлементОтбора.Значение, ЗначениеЗаполнено(ЭлементОтбора.Значение));
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура УстановитьОтборПоРоли()
	ИспользоватьОтборПоПредставителю = ДоверенностиПоРоли = "Представитель";
	ИспользоватьОтборПоДоверителю = ДоверенностиПоРоли = "Доверитель";
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ПредставительПользователь", АвторизованныйПользователь, ИспользоватьОтборПоПредставителю);
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ДоверительПользователь", АвторизованныйПользователь, ИспользоватьОтборПоДоверителю);
КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьСтрокуДляПоискаВЗапросе(Знач Значение)
	Возврат ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(Значение);
КонецФункции  

&НаКлиенте
Процедура ПослеЗагрузкиДоверенности(Результат, Контекст) Экспорт
	
	Если Результат <> Неопределено И ЗначениеЗаполнено(Результат.Доверенность) Тогда
		ПоказатьОповещениеПользователя(
		НСтр("ru = 'Загрузка завершена'"),
		ПолучитьНавигационнуюСсылку(Результат.Доверенность),
		Результат.Доверенность,
		БиблиотекаКартинок.Информация32,
		СтатусОповещенияПользователя.Информация);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьСтатусНаСервере()
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
	Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "МашиночитаемыеДоверенностиФНССлужебный.ОбновитьИПрочитатьСтатусДоверенностей", Элементы.Список.ВыделенныеСтроки);
КонецФункции

&НаКлиенте
Процедура УстановитьТип(ИмяПоля, ИмяПоляТипа)
	ЭтотОбъект[ИмяПоля] = ЭтотОбъект[ИмяПоляТипа].ПривестиЗначение(ЭтотОбъект[ИмяПоля]);
КонецПроцедуры

&НаСервере
Процедура ДобавитьПолеОтбора(ИмяПоля, ИмяПоляТипа)
	РасширенноеОписаниеТипаСтороны = Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы.СторонаМЧД.Тип);
	Для Каждого Тип Из РасширенноеОписаниеТипаСтороны.Типы() Цикл
		Элементы[ИмяПоляТипа].СписокВыбора.Добавить(Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)), Строка(Тип));
	КонецЦикла;
	Элементы[ИмяПоляТипа].СписокВыбора.СортироватьПоПредставлению();
	ОписаниеТипа = Элементы[ИмяПоляТипа].СписокВыбора[0].Значение;
	ЭтотОбъект[ИмяПоля] = ОписаниеТипа.ПривестиЗначение(ЭтотОбъект[ИмяПоля]);
	ЭтотОбъект[ИмяПоляТипа] = ОписаниеТипа;
КонецПроцедуры

&НаКлиенте
Процедура ПослеПолученияСтатуса(Результат, Контекст) Экспорт
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
	КонецЕсли;
	
	СостоянияДоверенностей = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
	СОшибками = 0;
	
	Для Каждого СостояниеДоверенности Из СостоянияДоверенностей Цикл
		СОшибками = СОшибками + (СостояниеДоверенности.Значение.ДанныеОшибкиЗапросаСтатуса <> Неопределено);
		ОповеститьОбИзменении(СостояниеДоверенности.Ключ);
	КонецЦикла;
	
	Если СОшибками = 0 Тогда
		ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Успешно загружен статус для %1 доверенностей'"), СостоянияДоверенностей.Количество());
	Иначе
		ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Успешно: %1, с ошибками: %2'"), СостоянияДоверенностей.Количество() - СОшибками, СОшибками);
	КонецЕсли;
	Контекст = Новый Структура("Доверенности", СостоянияДоверенностей);
	
	ОткрытьСписокСобытий = Новый ОписаниеОповещения("ОткрытьСписокСобытий", ЭтотОбъект, Контекст);
	
	ПоказатьОповещениеПользователя(
		НСтр("ru = 'Получение статуса завершено'"),
		ОткрытьСписокСобытий,
		ТекстСообщения,
		БиблиотекаКартинок.Информация32,
		СтатусОповещенияПользователя.Информация);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗагрузкеФайлов(ЗагруженныеФайлы, ДополнительныеПараметры) Экспорт
	
	Если ЗагруженныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьСообщения();
	РезультатЗагрузки = ЗагрузитьДоверенностиИзФайлов(ЗагруженныеФайлы);
	ЗагруженныеДоверенности = РезультатЗагрузки.Доверенности;
	
	Если ЗагруженныеДоверенности.Количество() > 0 Тогда
		Элементы.Список.ТекущаяСтрока = ЗагруженныеДоверенности[0];
	КонецЕсли;
	
	Элементы.Список.ВыделенныеСтроки.Очистить();

	Для Каждого Ссылка Из ЗагруженныеДоверенности Цикл
		Элементы.Список.ВыделенныеСтроки.Добавить(Ссылка);
	КонецЦикла;
	
	Если ЗначениеЗаполнено(РезультатЗагрузки.ТекстОшибки) Тогда
		ВызватьИсключение РезультатЗагрузки.ТекстОшибки;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьДоверенностиИзФайлов(Знач ЗагруженныеФайлы)
	
	Возврат Справочники.МашиночитаемыеДоверенности.ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы);
	
КонецФункции

&НаКлиенте
Процедура ОчисткаОтбора(ИмяПоля, ИмяПоляТипа)
	ОписаниеТипа = Элементы[ИмяПоляТипа].СписокВыбора[0].Значение;
	ЭтотОбъект[ИмяПоля] = ОписаниеТипа.ПривестиЗначение(Неопределено);
	ЭтотОбъект[ИмяПоляТипа] = ОписаниеТипа;
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораПолномочий(Результат, Контекст) Экспорт
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Полномочия = Новый СписокЗначений;
	Для Каждого Полномочие Из Результат.Полномочия Цикл
		Полномочия.Добавить(Полномочие.Код, Полномочие.Наименование);
	КонецЦикла;
	
	УстановитьПредставлениеПолномочий();
	УстановитьОтбор();
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьСписокСобытий(Контекст) Экспорт
	ОткрытьФорму("РегистрСведений.МашиночитаемыеДоверенностиСтатусы.Форма.СписокРезультатов",Контекст,ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПредставлениеПолномочий()
	Если ЗначениеЗаполнено(Полномочия) Тогда
		Если ТипЗНЧ(Полномочия) = Тип("Строка") Тогда
			КоличествоПолномочий = 1;
		Иначе
			КоличествоПолномочий = Полномочия.Количество();
		КонецЕсли;         
		ПолномочияПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Отбор по полномочиям (%1)'"), КоличествоПолномочий);
	Иначе
		ПолномочияПредставление = НСтр("ru='Любые полномочия'");
	КонецЕсли;
		
КонецПроцедуры

&НаСервереБезКонтекста
Функция ОтборДляДоверенностейПоСертификату(Знач Сертификат, Знач Представитель)
	
	Если Представитель Тогда
		Префикс = "Представитель";
	Иначе
		Префикс = "Доверитель";
	КонецЕсли;
	
	Если ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
		ДанныеСертификата = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сертификат, "ДанныеСертификата");
		Возврат МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату(ДанныеСертификата.Получить(), Префикс);
	Иначе
		Возврат МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату(Сертификат, Префикс);
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Функция ВсеОтборыПоСертификатам()
	Отбор = Новый Структура;
	КорниОтбора = СтрРазделить("Представитель,Доверитель", ",");
	СуффиксыОтбора = СтрРазделить("ОГРН,ИННФЛ,ИНН,СНИЛС", ",");
	Для Каждого КореньОтбора Из КорниОтбора Цикл
		Для Каждого СуффиксОтбора Из СуффиксыОтбора Цикл
			Отбор.Вставить(КореньОтбора + СуффиксОтбора);
		КонецЦикла;
	КонецЦикла;
	
	Возврат Отбор;
КонецФункции

&НаКлиенте
Процедура НастроитьОтборыСертификата(ВсеОтборыПоСертификатам, СертификатОтбора, Представитель)
	Если ЗначениеЗаполнено(СертификатОтбора) Тогда

		Если ТипЗнч(СертификатОтбора) = Тип("Структура") Тогда
			Отборы = Новый Структура;
			ТипСтороны = ?(Представитель, "Представитель", "Доверитель");
			Для Каждого ЭлементОтбора Из СертификатОтбора Цикл
				Отборы.Вставить(ТипСтороны + ЭлементОтбора.Ключ, ЭлементОтбора.Значение);
			КонецЦикла;
		Иначе
			Отборы = ОтборДляДоверенностейПоСертификату(СертификатОтбора, Представитель);
		КонецЕсли;
		
		Для Каждого ЭлементОтбора Из Отборы Цикл
			ВсеОтборыПоСертификатам[ЭлементОтбора.Ключ] = ?(ЭлементОтбора.Значение = Неопределено, "", ЭлементОтбора.Значение);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Асинх Процедура СертификатОкончаниеВыбора(Результат, Контекст) Экспорт
	Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
		СвойстваСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваСертификата(Новый СертификатКриптографии(Результат));
		Сертификат = СвойстваСертификата.Представление;
		СертификатПредставителя = Результат;
	Иначе
		Сертификат = Неопределено;
		СертификатПредставителя = Неопределено;
	КонецЕсли;
	УстановитьОтбор();
КонецПроцедуры

#КонецОбласти